from aiogram.types.message import Message
from aiogram.types.user import User
import validators
from app.data_provider import add_event2db, add_notifications2db, add_user2db
from app.messages import Event
from app.dates import parse_datetime_string
from app.messages import get_notifications


def handle_event_message(message: Message) -> str:
    """
    Получает и обрабатывает сообщение о планировании встречи
    Возвращает текст сообщения для мгновенной отправки
    """
    event = parse_event_string(
            message.md_text, message.from_user, message.chat.id)
    notifications = get_notifications(event)

    #TODO органичить организаторов. Только те, кто в БД. В БД добавляются через старт бота
    meeting_id = add_event2db(event)
    add_user2db(event.organizer)
    add_notifications2db(notifications, meeting_id)

    return notifications.now.message


def parse_event_string(message: str, organizer: User, chat_id: int) -> Event:
    """
    Парсит сообщения о планировании мероприятия и возвращает данные о встрече
    """
    event_params = [p.replace("\\", "") for p in message.split("\n")]
    if len(event_params) != 6:
        raise ValueError("Нужно ввести 6 строк \- ключевое слово, дата, время, \
описание, участники и ссылка")

    #TODO participants with names
    _, date, time, description, participants, link = event_params
    meeting_datetime = parse_datetime_string(date, time)
    if validators.url(link) != True:
        raise ValueError("Ссылка на онлайн встречу не является валидной\. \
Попробуйте еще раз")
    
    return Event(
            date_time=meeting_datetime,
            organizer=organizer,
            agenda=description,
            participants=participants,
            meeting_url=link,
            chat_id=chat_id
            )
